////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __WN_SCRIPTING_CONFIG_H__
#define __WN_SCRIPTING_CONFIG_H__

#include "WNCore/inc/WNBase.h"

//#define WN_SCRIPTING_DESTROY_BLOCKS
//#define WN_SCRIPTING_OUTPUT_PARSE_TRACE
#define WN_SCRIPTING_MULTITHREADED_PARSING
#define WN_SCRIPTING_TAB_SIZE                   4
#define WN_SCRIPTING_ENABLE_BOUNDS_CHECKING     1
#define WN_SCRIPTING_ALLOW_CODE_AFTER_RETURN    17
//#define WN_SCRIPTING_GENERATE_OPTIMIZED         1
#define WN_SCRIPTING_MAX_CONST_SIZE             8

//These are for our constant types
typedef WN_INT32   WNS_INT_CONST;
typedef WN_FLOAT32 WNS_FLOAT_CONST;
typedef WN_CHAR    WNS_CHAR_CONST;
typedef WN_CHAR*   WNS_STRING_CONST;

#if defined _WN_WINDOWS && _WN_MSVC < 160000000
    // We REALLY want to make sure BOOST knows not to use exceptions
    #define BOOST_NO_EXCEPTIONS
    #define BOOST_NO_RTTI
    #define BOOST_NO_TYPEID
    #define BOOST_EXCEPTION_DISABLE

    #undef _HAS_EXCEPTIONS

    #include <boost/unordered/unordered_map.hpp>
    #include <boost/unordered/unordered_set.hpp>

    #define WN_UNORDERED_MAP boost::unordered_map
    #define WN_UNORDERED_MULTIMAP boost::unordered_multimap
    #define WN_UNORDERED_SET boost::unordered_set
#else
    #include <unordered_map>
    #include <unordered_set>

    #define WN_UNORDERED_MAP std::unordered_map
    #define WN_UNORDERED_MULTIMAP std::unordered_multimap
    #define WN_UNORDERED_SET std::unordered_set
#endif

#endif // __WN_SCRIPTING_CONFIG_H__
